using InverseClockWork.Cutscenes;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

namespace InverseClockWork.Extra.Cutscenes
{
    public class ReroutingDialogBehaviour : DialogBoxBehaviour
    {
        public override void Init(object dialog)
        {
            var basicDialog = dialog as InverseClockWork.Cutscenes.Metas.BasicScriptDialogMetaProvider.DialogItem;
            if (basicDialog != null)
            {
                ConfigureBox(basicDialog.speaker, basicDialog.avatar, basicDialog.line);
                return;
            }

            if (FullScreenInstance)
            {
                Destroy(FullScreenInstance.gameObject);
            }

            //Debug.LogWarning("Can't parse dialog object");
            Destroy(gameObject);
        }

        private static ReroutingFullScreenDialog FullScreenInstance
        {
            get; set;
        }

        private ReroutingDialogOverCharacterDialog OverCharacterInstance
        {
            get; set;
        }

        [SerializeField]
        private ReroutingFullScreenDialog prefab_FullScreen;
        [SerializeField]
        private ReroutingDialogOverCharacterDialog prefab_OverCharacter;
        [SerializeField]
        private string _fullScreenSpeaker;

        private ReroutingFullScreenDialog Prefab_FullScreen { get => prefab_FullScreen; set => prefab_FullScreen = value; }
        public ReroutingDialogOverCharacterDialog Prefab_OverCharacter { get => prefab_OverCharacter; set => prefab_OverCharacter = value; }
        private string FullScreenSpeaker { get => _fullScreenSpeaker; set => _fullScreenSpeaker = value; }


        private void ConfigureBox(string speaker, Sprite icon, string line)
        {
            if (speaker == FullScreenSpeaker && line.Length > 0)
            {

                if (!FullScreenInstance)
                {
                    FullScreenInstance = Instantiate(Prefab_FullScreen);
                }
                FullScreenInstance.Host = this;
                FullScreenInstance.AddLine(line);

                return;
            }
            if (FullScreenInstance)
            {
                Destroy(FullScreenInstance.gameObject);
            }

            var chrMarker = ReroutingDialogCharacterMarker.GetCharacter(speaker);
            if (chrMarker != null)
            {
                OverCharacterInstance = Instantiate(Prefab_OverCharacter);
                OverCharacterInstance.Host = this;
                OverCharacterInstance.Config(chrMarker, line);
            }
        }
    }
}